#ifndef CONTENEDORDEDEFINES_H_
#define CONTENEDORDEDEFINES_H_

#include "Constantes.h"
#include "ContenedorDeDefines.h"
#include <string.h>
#include "Utilitarias.h"
	/*  se hace uso de lo que podemos considerar como una matriz bidimensional
	 *  de punteros a cadenas (de long "LONGITUD_VALOR_DEFINE")
	 *  con CANT_MAX_DEFINES filas y 2 columnas,
	 *  una correspondiente al nombre del define
	 *  y otra al valor del mismo
	 *  */
class ContenedorDeDefines {
public:
	char matrizDeDefines[CANT_MAX_DEFINES][2][LONGITUD_VALOR_DEFINE];
	int indexMatrizDefines;
	int indiceDeLosDefinesDentroDeLaMatriz;
	int indiceDeLosValoresDentroDeLaMatriz;
	ContenedorDeDefines() {
		int a = 0;
		char* aux = "inicializacion";
		int sizeAux = strlen(aux);

		indexMatrizDefines = -1;
		indiceDeLosDefinesDentroDeLaMatriz = 0;
		indiceDeLosValoresDentroDeLaMatriz = 1;

		for (a = 0; a < CANT_MAX_DEFINES; a++) {
			setDefineYSuValor(aux, sizeAux, aux, sizeAux, a);
		}
	}

	//  devuelve un puntero a una cadena con el nombre del define
char* getDefine(int indice) {
	return matrizDeDefines[indice][indiceDeLosDefinesDentroDeLaMatriz];
}
	//  devuelve un puntero a una cadena con el valor del define
char* getValorDefine(int indice) {
	return matrizDeDefines[indice][indiceDeLosValoresDentroDeLaMatriz];
}

void setDefineYSuValor(char* newDefine,
		int sizeDefine,	char* newVdefine, int sizeVdefine, int indice) {
	char* define = getDefine(indice);
	char* vDefine = getValorDefine(indice);
	Utilitarias util;
	util.copiarCadenaYAgregarNullAlFinal(define, newDefine, sizeDefine);
	util.copiarCadenaYAgregarNullAlFinal(vDefine, newVdefine, sizeVdefine);
}
	/*  busca un nombre de define determinado en la estructura
	 *  y devuelve TRUE si lo halla y FALSE en caso contrario.
	 */
int existeEsteDefine(char* buscado, int size) {
	int k = -1;
	int salir = FALSE;
	int encontrado = FALSE;

	while ((salir == FALSE) && (encontrado == FALSE)) {
		k++;
		if (strncmp(buscado, getDefine(k), size) == 0)
			encontrado = TRUE;
		else if (k >= indexMatrizDefines)
			salir = TRUE;
	}
	return encontrado;
}

};
/*  Se garantiza que todos los strings almacenados terminan en NULL
 *  Por lo que se puede utilizar sobre ellos, de forma segura,
 *  las funciones strcat, strcpy, etc
 *  */
#endif /* CONTENEDORDEDEFINES_H_ */
